// 1.
// 222,111，444,333,666
//  const promise = new Promise(resolve => {
//   // 同步代码
//   console.log(222);
//   resolve();
// });
// // 宏任务  当setTimeout时间较短时优先，如果定时器时间较长则setImmediate先执行
// setTimeout(() => {console.log(333);}, 0);
// // 微任务
// promise.then(() => {console.log(444);});
// // 宏任务
// setImmediate(() => {console.log(666);});
// // 微任务默认排第一除非第一正在执行或者重开一个队列
// process.nextTick(() => {console.log(111);});


//2:
// 444，333,111,222
// 微任务
// process.nextTick(() => {
//   console.log('process.nextTick() 333');
// })
// // 宏任务
// setTimeout(() => {
//   console.log('setTimeout()  111');
// }, 0)
// // 宏任务
// setImmediate(() => {
//   console.log('setImmediate() 222');
// })
// // 同步代码
// console.log('全局代码执行完了 444');


//3. 0 2 3  4 1 
// console.log('0')

// setTimeout(() => {
//   console.log('1')
// }, 0)
// // promise本身为同步代码只是里面的回调函数是异步
// new Promise((resolve) => {
//     console.log('2')
//     resolve()
//   })
//   .then(() => {
//     console.log('3')
//   })
//   .then(() => {
//     console.log('4')
//   })

// 4，   5 111 444 888 555 222 666 333 999
// setTimeout  ， setImmediate是nodejs的队列

// console.log('5')
// // 微任务
// process.nextTick(() => {console.log(111);}); 
// // 宏任务 单独队列
// setTimeout(() => {console.log(222);}, 0);  
// // 宏任务单独队列
// setImmediate(() => {console.log(333);});

// const promise = Promise.resolve();

// promise
// // 微任务
//   .then(() => {        //t1
//     console.log(444);
//     // 微任务
//     process.nextTick(() => {console.log(555);});  
//     // 宏任务
//     setTimeout(() => {console.log(666);}, 0);//d2
//   })
//   .catch(() => {console.log(777);})
//   // 微任务
//   .then(() => {
//     console.log(888);
//     // 宏任务
//     setImmediate(() => {console.log(999);});
//   })
//   .catch(() => {console.log(101010);})


//5，  4 1 3 6 8 2 7 5
// async function async1() {
//   console.log('1');
//   // await是同步代码它后面的代码才是异步
//   await async2();
//   console.log('2')
// }
// async function async2() {
//   console.log('3')
// }
// console.log('4');
// setTimeout(() => {
//   console.log('5')
// }, 0);
// async1();
// new Promise((resolve) => {
//   console.log('6');
//   resolve()
// }).then(() => {
//   console.log('7')
// });

// console.log('8')

//6， 1 2 3 5 4
// setTimeout(() => {
//   console.log(4);
// }, 0);

// new Promise(resolve => {
//   console.log(1);
//   for (let i = 0; i < 10000; i++) {
//     i == 9999 && resolve();
//   }
//   console.log(2)
// }).then(() => {
//   console.log(5)
// })

// console.log(3)


//7.  1 2 3 4
// Promise.resolve().then(() => {//then1
//   console.log(1);
//   process.nextTick(() => {
//     console.log(2);
//   })
// })
// Promise.resolve().then(function () {//then2
//   setTimeout(() => {
//     new Promise(function (resolve, reject) {
//       console.log(3);
//       reject();
//     }).catch(function () {
//       console.log(4);
//     });
//   })
// });

//8:  1  3 2 4
// Promise.resolve().then(() => { //then1
//   console.log(1);
//   process.nextTick(() => {
//     console.log(2);
//   })
// })
// Promise.resolve().then(function () { //then2
//   new Promise(function (resolve, reject) {
//     console.log(3);
//     reject();
//   }).catch(function () {
//     console.log(4);
//   });
// });


//9.1 3 2 4
// Promise.resolve().then(() => {
//   console.log(1);
//   queueMicrotask(() => {
//       console.log(2);
//   })
// })
// Promise.resolve().then(function () {
//     new Promise(function (resolve, reject) {
//         console.log(3);
//         reject();
//     }).catch(function () {
//         console.log(4);
//     });
// });

//10.  1 2 3 8 4 7 5 6
// new Promise((resolve, reject) => { //
//     console.log(1)
//     resolve(1)
//   })
//   .then(() => { //then0
//     console.log(2)
//     new Promise((resolve, reject) => {
//         console.log(3)
//         resolve()
//       })
//       .then(() => { //then1
//         console.log(4)
//       })
//       .then(() => { //then2
//         console.log(5)
//       })
//       .then(() => { //then3
//         console.log(6)
//       })
//     console.log(8);
//   })
//   .then(() => { //then4
//     console.log(7)
//   })
